package simAnlage;

import java.util.ArrayList;
import java.util.Properties;

import steuerung.Config;
import verbindung.DBDCallback;
import verbindung.DBDSingleton;
import zug.Zug;

public class SimAnlage extends Thread implements DBDCallback {
	ArrayList<SimAnlageObjekt> objekte = new ArrayList<SimAnlageObjekt>();
	ArrayList<SimWagentyp> wagentypen = new ArrayList<SimWagentyp>();

	SimAnlageObjekt start;
	int aktWagen = 0;
	Zug zug = null;

	public double zuggeschw;

	SimAnlage() {
		DBDSingleton.init("localhost", 1436, true, false);

		DBDSingleton.getClient().subscribeVar(Config.zugname, this);
		DBDSingleton.getClient().subscribeVar("ABLSIM_RESET", this);
	}

	public void start(Zug zug)
	{
		this.zug = zug;

		super.start();
	}

	@Override
	public void run()
	{
		double wtime = 0;
		while (true) {
			try {
				wtime += ((double)zuggeschw) * 250.;

				if (wtime >= 262) {
					if (aktWagen < zug.waggons.size()) {
						wtime = 0;
						SimWagen w = new SimWagen(zug.waggons.get(aktWagen));
						
						start.neuerWagen(w, this);

						aktWagen++;
					}
				}
				sleep(100);
			} catch (Exception e) {
				System.out.println(e);
			}
		}
	}

	@Override
	public void call(String var, int value)
	{
		if(var.equals(Config.zugname))
		{
		zuggeschw = (double) value / 100;
		System.out.println("simanlage called: value" + value + " " + var + " zugg " + zuggeschw);
		}
		if(var.equals("ABLSIM_RESET"))
		{
			 aktWagen = 0;
		}

	}

}
